package com.itlong.cloud.operate.service;

import com.itlong.cloud.POJO.DTO.operate.OperateFunctionGetPageDTO;
import com.itlong.cloud.POJO.PO.OperateFunctionPO;
import com.itlong.cloud.POJO.VO.operate.OperateAllotFunctionGetVO;
import com.itlong.cloud.POJO.VO.operate.OperateFunctionVO;
import com.itlong.cloud.POJO.VO.operate.OperateGetRoleMenuVO;
import com.itlong.cloud.utils.page.Page;

import java.io.IOException;
import java.util.List;

/**
 * <desc>
 *      运营-菜单资源业务处理接口
 * </desc>
 *
 * @createDate 2017/09/21
 */
public interface IOperateFunctionService {
    /**
     * <desc>
     *      保存资源
     * </desc>
     *
     * @param operateFunctionPO 资源实体
     * @return sql执行行数
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    Integer save(OperateFunctionPO operateFunctionPO) throws Exception;
    /**
     * <desc>
     *      更新资源
     * </desc>
     *
     * @param operateFunctionPO 资源实体
     * @return sql执行行数
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    Integer update(OperateFunctionPO operateFunctionPO) throws Exception;
    /**
     * <desc>
     *      通过id获取资源
     * </desc>
     *
     * @param operateFunctionPO 资源实体
     * @return 资源实体
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    OperateFunctionPO getOne(OperateFunctionPO operateFunctionPO);
    /**
     * <desc>
     *      获取所有资源
     * </desc>
     *
     * @return 资源实体集合
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    List<OperateFunctionPO> getList();

    /**
     * <desc>
     *      获取分页数据
     * </desc>
     *
     * @param pageDTO 查询参数DTO
     * @return page模型
     * @author Jiaqi.X
     * @createDate 2017/09/22
     */
    Page<OperateFunctionPO> getPage(OperateFunctionGetPageDTO pageDTO) throws Exception;

    /**
     * <desc>
     *      删除资源
     * </desc>
     *
     * @param functionIds 资源id数组
     * @return sql执行行数
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    Integer delete(String functionIds);

    /**
     * <desc>
     *      根据parent获取下级资源
     * </desc>
     *
     * @param functionId 资源id
     * @return 子级结果集
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    List<OperateFunctionVO> getChilds(String functionId);

    /**
     * <desc>
     *      获取分配菜单所有节点
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/26
     */
    public List<OperateAllotFunctionGetVO> getAllotFunction(String roleId);

    /**
     * <desc>
     *      获取当前节点的父级节点以及同级别所有父级节点
     * </desc>
     *
     * @param functionId 资源id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/30
     */
    public List<OperateFunctionPO> getParentLevelFunctions(String functionId);

    /**
     * <desc>
     *      获取用户角色的菜单
     * </desc>
     *
     * @param roleIds 角色id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/17
     */
    public List<OperateGetRoleMenuVO> getRoleMenu(String roleIds);

    /**
     * <desc>
     *      获取用户角色的页面权限
     * </desc>
     *
     * @param roleIds 角色id 多个,号分隔
     * @param functionId    当前点击菜单id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/17
     */
    public List<OperateGetRoleMenuVO> getAuthBtns(String roleIds,String functionId);

    /**
     * <desc>
     *      获取角色权限的所有资源并缓存至redis
     * </desc>
     *
     * @param roleIds 角色id 多个,号分隔
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/17
     */
    List<OperateFunctionPO> getRoleAuthFunctions(String roleIds,String token) throws IOException;
}
